1. Technical Field
Embodiments of the invention relate generally to data processing systems and associated methods. In particular, the invention is directed to systems, methods, and computer program products for reconfiguring computer programming instructions to improve the performance of data processing systems.
2. Description of the Related Art
Data processing systems can be found in a variety devices, such as mobile telephones, TV set top boxes, pagers, coffee makers, toasters, in-car systems, vehicle management control systems, computers (servers, desktops, or laptops), and personal digital assistants (PDAs). New hardware architectures for data processing systems are constantly being developed since there is an ever present desire for computation capacity, as well as other requirements such as safety-critical systems, autonomy management, and power saving features.
Data processing systems are typically designed to cooperate with software components to provide a desired functionality. Software is essentially computer instructions provided to a data processing system in a medium readable by the data processing system. Software is often referred to as a “computer program,” an “application,” or “code.” Data processing devices operate using machine code that is specific to the particular hardware platform of the data processing system. “Native code” is a term generally referring to the code that runs on a specific hardware platform after it is compiled. To facilitate application development, and to re-use applications to run on different host platforms, it is desirable that an application be transportable between different host hardware (including processors and other supporting devices). The Java programming language provides a mechanism to distribute software to different computing platforms, which may contain a variety of central processing units and operating system architectures. Java is a trademark of Sun Microsystems, Inc.
To enable a Java application to execute on different types of data processing systems, a Java compiler generates bytecode instructions that are non-specific to particular computer architectures. Bytecode instructions are designed to be interpreted on any machine and translated at run time into native machine code. A compiled Java program is distributed as a set of class files. A development environment, such as the Java Development Kit (JDK) available from Sun Microsystems, Inc., can be used to build Java bytecode from Java language source code and libraries. The JVM converts the application's bytecode into native code appropriate for the host hardware.
With Java or other similar environments, the execution of the code via a virtual machine running on top of the hardware platform is generally slower than native code execution. To address this issue in the context of virtual machines, a number of virtual machine implementation variants have been devised, such as Just-In-Time (JIT) compilers, Dynamic Adaptive Compilation (DAC), and variations of Ahead-Of-Time (AOT) compilation. These methods generally include some aspect of compilation of the machine language of the virtual machine, which allows native code to be executed versus the instruction-by-instruction interpretation that may each result in multiple native instructions. Additionally, techniques are known for optimizing bytecode for execution in a JVM. Other approaches to increasing the speed of execution of applications involve reconfiguring a program by replacing part of the program, at run time, with other code according to some optimization policy.
Therefore, there is a continuing desire for systems and methods for expediting execution of applications generally, and accelerating execution of applications processed by virtual machines in particular.